import { createSlice, PayloadAction } from "@reduxjs/toolkit"

export type UserStateType = {
    username: string
    nickname: string
}

// 初始化数据
const INIT_STATE: UserStateType = {
    username: "",
    nickname: ""
}

export const userSlice = createSlice({
    name: "user",
    initialState: INIT_STATE,
    reducers: {
        // 登录
        loginReducer(state: UserStateType, action: PayloadAction<UserStateType>) {
            // 两种写法：
            // 写法1：（RTK内部已经使用immer实现了优化），可以直接修改值，不需要进行浅拷贝，返回一个新的对象
            const { username, nickname } = action.payload
            state.username = username
            state.nickname = nickname
            // 写法2：浅拷贝，返回一个新的对象
            // return action.payload
        },
        // 注销
        logoutReducer() {
            // 注销只需要将username和nickname设置为初始值即可
            // 写法1：
            // state.username = INIT_STATE.username
            // state.nickname = INIT_STATE.nickname
            // 写法2：
            return INIT_STATE
        }
    }
})

export const { loginReducer, logoutReducer } = userSlice.actions
export default userSlice.reducer
